/*
 * Copyright (c) 1997, 2000, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.awt.image;


/**
 * This abstract class defines a lookup table object.  ByteLookupTable
 * and ShortLookupTable are subclasses, which
 * contain byte and short data, respectively.  A lookup table
 * contains data arrays for one or more bands (or components) of an image
 * (for example, separate arrays for R, G, and B),
 * and it contains an offset which will be subtracted from the
 * input values before indexing into the arrays.  This allows an array
 * smaller than the native data size to be provided for a
 * constrained input.  If there is only one array in the lookup
 * table, it will be applied to all bands.  All arrays must be the
 * same size.
 *
 * @see ByteLookupTable
 * @see ShortLookupTable
 * @see LookupOp
 */
public abstract class LookupTable extends Object {

  /**
   * Constants
   */

  int numComponents;
  int offset;
  int numEntries;

  /**
   * Constructs a new LookupTable from the number of components and an offset
   * into the lookup table.
   *
   * @param offset the offset to subtract from input values before indexing into the data arrays for
   * this <code>LookupTable</code>
   * @param numComponents the number of data arrays in this <code>LookupTable</code>
   * @throws IllegalArgumentException if <code>offset</code> is less than 0 or if
   * <code>numComponents</code> is less than 1
   */
  protected LookupTable(int offset, int numComponents) {
    if (offset < 0) {
      throw new
          IllegalArgumentException("Offset must be greater than 0");
    }
    if (numComponents < 1) {
      throw new IllegalArgumentException("Number of components must " +
          " be at least 1");
    }
    this.numComponents = numComponents;
    this.offset = offset;
  }

  /**
   * Returns the number of components in the lookup table.
   *
   * @return the number of components in this <code>LookupTable</code>.
   */
  public int getNumComponents() {
    return numComponents;
  }

  /**
   * Returns the offset.
   *
   * @return the offset of this <code>LookupTable</code>.
   */
  public int getOffset() {
    return offset;
  }

  /**
   * Returns an <code>int</code> array of components for
   * one pixel.  The <code>dest</code> array contains the
   * result of the lookup and is returned.  If dest is
   * <code>null</code>, a new array is allocated.  The
   * source and destination can be equal.
   *
   * @param src the source array of components of one pixel
   * @param dest the destination array of components for one pixel, translated with this
   * <code>LookupTable</code>
   * @return an <code>int</code> array of components for one pixel.
   */
  public abstract int[] lookupPixel(int[] src, int[] dest);

}
